跳到主要内容

Linux 进程管理相关

pidof 快速查找进程 ⭐

pidof 是 Linux 系统中用来查找正在运行进程的进程号(pid)的工具

pidof nginx
# 等价于
ps -aux | grep nginx

pidof 命令用于查找指定名称的进程的进程号 id 号。

pidof(选项)(参数)

选项

-s:仅返回一个进程号;
-c:仅显示具有相同 “root” 目录的进程;
-x:显示由脚本开启的进程;
-o:指定不显示的进程 ID。

查看某端口占用情况

查看某端口占用情况

lsof -i :端口号

以下命令可用于杀死占用某端口的所有进程。

kill -9 $(lsof -i tcp:进程号 -t)

查看已安装的软件

dpkg -l # 列出当前系统中所有的包.可以和参数 less 一起使用在分屏查看.

dpkg -l | grep -i "软件包名" # 查看系统中与"软件包名"相关联的包.

根据 PID 查找进程

Linux 的所有进程都保存在 /proc/ 目录下,保存形式为:/proc/ 进程号。进入到进程号目录后,里面有一个 cwd 链接文件即指向的进程的的目录。

ll /proc/4874

kill 结束进程

Linux kill 命令用于删除执行中的程序或工作。

kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。

sudo pkill -u username #关闭某个用户下的全部进程
# 程序或工作的编号可利用 ps 指令或 jobs 指令查看。
kill PID # 温柔地关闭进程号为PID的进程

kill PID1 PID2 PID3 # 温柔地关闭进程号为PID1、PID2、PID3的进程

kill -9 PID # 强行粗暴地关闭进程号为PID的进程

# 杀死指定用户所有进程
kill -9 $(ps -ef | grep alsritter) # 方法一 过滤出 alsritter 用户进程
kill -u alsritter # 方法二

注意,尽量少用 kill -9,因为会导致程序直接进行关闭,没有给进程留下一点回旋的余地,这样很糟糕,程序需要进行资源的回收,所以可能会导致一些问题。

kill 命令可以传递一个信号量(常用的信号量就是下面这几个)

  • -1:重新读取一次参数的配置文件(类似 reload)
  • -2:代表与由键盘输入ctrl c 同样的操作;
  • -9:立刻强制删除一个工作;
  • -15:以正常的程序方式终止一项工作;(默认)

一般来说进程可以接收到 -15 这个信号量自行处理善后工作,而 -9 则不留机会让进程完成清理工作。

完整的信号量类型如下:

# -l 可以打印出支持的信号量
kill -l

1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX

killall 批量杀死进程

语法:killall [options][singal] 进程名 作用:按照进程名来杀死进程,主要批量杀死 web 服务器进程 选项如下:

-i:交互式,询问是否要杀死某个进程 -I:忽略进程的大小写

killall 程序名 # 关闭多个指定程序名的进程
# 例如 killall hello* 就可以把 hello1, hello2, hello3 都杀死

kill 和 killall 的区别?

使用 kill 杀死多个进程,需要先找到进程 PID 才能关,而 killall 可以直接通过名字(支持通配符)来关闭

ctrl + c ⭐

内核在某些情况下发送信号,比如在进程往一个已经关闭的管道写数据时会产生 SIGPIPE 信号,在终端执行特定的组合键可以使系统发送特定的信号给此进程,完成一系列的动作

命令        信号        含义
ctrl + c SIGINT 强制进程结束
ctrl + z SIGTSTP 任务中断,进程挂起
ctrl + \ SIGQUIT 进程结束 和 dump core
ctrl + d EOF
SIGHUP 终止收到该信号的进程。若程序中没有捕捉该信号,当收到该信号时,进程就会退出(常用于 重启、重新加载进程)

Reference

linux中为什么不推荐使用kill -9 直接关闭进程?如何正确关闭程序? 每天一个linux命令(44):top命令 linux命令--pidof Linux kill命令